package simulator;

import java.util.Random;

public class WaterHeating 
{
    
    //Variabler
    private int people;                 //familie
    private int type;                   //oppvarming type
    private int consumption;            //stroem forbruk per kvadrat meter
    private double waterUsage;
    private double waterHeating;    //stroem forbruk i aar
    private double Cj = 4186; //Spesifikk varmekapasitet til vann i J(gram/grader)
    private double size;      //Størrelse på varmtvannstank
    private double waterHeatingHour; //Strømforbruk på time
    private int time; //tiden på døgnet
    
    //end of variabler
    
    /*** 
     * @param _people
     * @param _type - 1 = Forhåndsbereder, 2 = gjennomstrømningsbereder, 
     * 3 = Gass
     * @param _time 
     */
    public WaterHeating(int _people, int _type, int _time)
    {
        people = _people;
        type = _type;
        time = _time;
    }
    
//    public double Demo()
//    {
//        type();
//        return waterHeating;
//    }
    /**
     * Metode for å skjekke hvordan oppvarming av vannet fungerer
     * Regner ut forbruk etter hvilken type som blir brukt.
     */
//    public void type()
//    {
//        if (type == 1) //Forhåndsbereder
//        {
//            //size = 200;
//            consumption = ((90) + (int)(Math.random() * (120 - (90) + 1))) * people;
//            waterHeating = ((consumption * Cj * 50)/3600); 
//        }
//        if (type == 2) //Gjennomstrømningsvarmer    
//        {   
//            consumption = ((90) + (int)(Math.random() * (150 - (90) + 1))) * people;
//            waterHeating = ((consumption * Cj * 60)/24) / ((1.15) + (int)(Math.random() * (1.2 - (1.15) + 1)));
//            
//        }
//        if (type == 3) //Gass
//        {
//            waterHeating = 0;
//        }
//    }
    
    /**
     * Her setter vi hva tiden er
     * @param _time 
     */
    public void setTime(int _time) {
		time = time;
	}
    
    /**
     * 
     * @return En variabel som er +- 5% av times forbruket. 
     */
//    public double varians()
//    {
//        double min, max;
//        min = waterHeatingHour * -0.05;
//        max = waterHeatingHour * 0.05;
//        
//       double var = ((min) + (int)(Math.random() * (max - (min) + 1))); 
//       return var;
//       
//    }
    
    /**
     * Dags demonstrasjon som tar utgangspunkt i selve kalkulasjonen for ett døgn
     * Det finnes 7 perioder med forskjellige vannforbruk per døgn.
     * Vannforbruket beregnes ved å dele sannsynlig vannforbruk (liter) på antall timer
     * i hver periode. Deretter ganges vannforbruket med energiforbruk per liter
     * 
     * VannForbruk beregnes på en følgende måte:
     *  1,3     liter - vaske hender
     *  13-22   liter - dusj
     *  6 - 6,5 liter - oppvask
     *  + summering av forskjellige forbrukmål i noen perioder 
     */
    public double dayDemonstration()
    {
//        Demo();
            waterUsage = new Random().nextDouble();
                if (time >= 0 && time <= 5) {   //00.00-6.00
                    waterUsage= (0 + (waterUsage * (1.3 - 0)))/6;
		} else if (time <= 7) {         //6.00-8.00
                    waterUsage=(13 + (waterUsage * (23.3 - 13)))/2;
		} else if (time <= 10) {        //8.00-11.00
                    waterUsage=(6 + (waterUsage * (7.3 - 6)))/3;
		} else if (time <= 12) {        //11.00-13.00
                    waterUsage=(6 + (waterUsage * (6.5 - 6)))/2;
		} else if (time <= 16) {        //13.00-17.00
                    waterUsage=(0 + (waterUsage * (1.3 - 0)))/4;
		} else if (time <= 20) {        //17.00-21.00
                    waterUsage=(13 + (waterUsage * (22 - 13)))/4;
		} else if (time <= 22) {        //21.00-23.00
                    waterUsage=(6 + (waterUsage * (6.5 - 6)))/2;
		} else if (time <= 24) {        //23.00-00.00
                    waterUsage=0 + (waterUsage * (1.3 - 0));
		}
            SetEnergiUsage(time);
        return waterHeatingHour;
    }
    /* Forhåndsbereder tar 60Wh per liter
     * og bruker 40Wh, hvis vann ikke ble tatt
     */
    public void SetEnergiUsage(int time){
        if(waterUsage*60*people < 40){                      
            waterHeatingHour = waterUsage*60*people + 40;
        }
        else {
            waterHeatingHour = waterUsage*60*people;
        }
    }
}